package br.edu.ifpb.entidades;


import java.sql.SQLException;
import java.util.ArrayList;

import br.edu.ifpb.classesDAO.UsuarioDAO;

public class Usuario {
	private String nome = "";
	private String login = "";
	private String senha = "";
	private int id = 0;
	private boolean logado = false;
	private UsuarioDAO dao;
	
	public Usuario(){
		dao = new UsuarioDAO();
	}
	
	public boolean getLogado(){
		return logado;
	}
	public String getNome() {
		return nome;
	}
	public void setNome(String nome) {
		this.nome = nome;
	}
	public String getLogin() {
		return login;
	}
	public void setLogin(String login) {
		this.login = login;
	}
	public String getSenha() {
		return senha;
	}
	public void setSenha(String senha) {
		this.senha = senha;
	}
	public int getId() {
		return id;
	}
	public void setId(int id) {
		this.id = id;
	}
	
	public void setAll(String login, String senha) throws SQLException{
		
		Usuario u = dao.getAttributes(login);
		
		if (u != null){		 
			this.id = u.getId();
			this.login = u.getLogin();
			this.senha = u.getSenha();
			this.nome = u.getNome();
			
			if (this.senha.equals(senha))
				this.logado = true;		
		}
		
	}
	
	public void logout() throws SQLException{
		this.dao.disconnect();
		this.login = "";
		this.senha = "";
		this.nome = "";
		this.id = 0;
		this.logado = false;
	}
	
	public boolean newUser(String login, String senha, String nome) throws SQLException{
		
		if (login.length() > 11){
			System.out.println("O login deve ter menos de 11 caracteres");
			return false;
		}
		
		if (login.length() < 4){
			System.out.println("O login deve ter no mínimo 4 caracteres");
			return false;
		}

		if (nome.length() > 100){
			System.out.println("O nome deve ter menos de 100 caracteres");
			return false;
		}
		
		if (nome.length() < 2){
			System.out.println("O nome deve ter no mínimo 2 caracteres");
			return false;
		}
		
		if (senha.length() > 16){
			System.out.println("A senha deve ter menos de 16 caracteres");
			return false;
		}
		
		if (senha.length() < 6){
			System.out.println("A senha deve ter no mínimo 6 caracteres");
			return false;
		}
		
		Usuario u = new Usuario();
		u.setLogin(login);
		u.setSenha(senha);
		u.setNome(nome);
		
		if (!dao.insert(u))	{
			System.out.println("\nJa existe alguem com esse nome de login, tente novamente");
			return false;
		}
		
		return true;
		
	}
	
	public void listAll() throws SQLException{
		ArrayList<Usuario> lista = dao.getAll();
		
		if (lista.isEmpty()){
			
			System.out.println("\nNao existem cadastros até o momento");
			
			return;
		}
		
		System.out.println("\nCod.   Nome do Usuario");
		
		for (int i = 0; i < lista.size(); i++) 
			System.out.printf("%-4d _ %s\n",lista.get(i).getId() , lista.get(i).getNome());
	}
	
	public void trocarSenha(String nova_senha) throws SQLException{
		
		Usuario u = new Usuario();
		
		u.setId(this.getId());
		u.setLogin(this.getLogin());
		u.setNome(this.getNome());
		u.setSenha(nova_senha);
		
		dao.update(u);
		
		this.senha = nova_senha;
	}
	
}
